package model.editormodel;

import java.util.Collections;
import java.util.List;

public class ErrorMessage {
	/**
	 * <b>Enum:</b> <br>
	 * Diese Enumeration stellt folgende Aufzaehlungstypen zur Verfuegung: <br>
	 * <i>ALL_CHECKS_OK</i>, <i>MISSING_INPUT_CONNECTION</i>,
	 * <i>MISSING_OUTPUT_CONNECTION</i>, <i>MISSING_SWITCH_CLOCK</i>,
	 * <i>INPUT_CHECK_OKAY</i>, <i>OUTPUT_CHECK_OKAY</i>,
	 * <i>SUBNET_CHECK_OKAY</i>, <i>ONE_CHECK_FAILED</i> , <i>EMPTY_CIRCUIT</i>
	 * , <i>NO_EMPTY_CIRCUIT</i> <br>
	 * <b>Funktion:</b> Die Aufzaehlungstypen dienen als Nachricht, welche
	 * Ergebnisse der <code>Check</code> erzielt hat.
	 * 
	 * @author Team Locsi
	 * 
	 */
	public static enum ErrorType {
		ALL_CHECKS_OK, MISSING_INPUT_CONNECTION, MISSING_OUTPUT_CONNECTION, MISSING_SWITCH_CLOCK, INPUT_CHECK_OKAY, OUTPUT_CHECK_OKAY, SUBNET_CHECK_OKAY, ONE_CHECK_FAILED, EMPTY_CIRCUIT, NO_EMPTY_CIRCUIT
	}

	private List<LogicEditorElement> errorElements;
	private List<Input> errorInputs;
	private ErrorType error;

	/**
	 * Dieser Konstruktor erzeugt eine <code>ErrorMessage</code>-Objekt
	 * 
	 * @param errorElements
	 *            <code>List<LogicEditorElement></code> - Elemente die Fehler
	 *            verursachen
	 * @param errorInputs
	 *            <code>List<Input> errorInputs</code> - Inputs die Fehler
	 *            verursachen
	 */
	public ErrorMessage(List<LogicEditorElement> errorElements,
			List<Input> errorInputs) {
		this.errorInputs = errorInputs;
		this.errorElements = errorElements;
	}

	/**
	 * Dieser Konstruktor erzeugt eine <code>ErrorMessage</code>-Objekt
	 * 
	 * @param error
	 *            <code>ErrorType</code> - zugehoeriger ErrorTyp
	 */
	public ErrorMessage(ErrorType error) {
		this.error = error;
	}

	/**
	 * Diese Methode gibt alle Inputs als Liste zurueck, die Fehler verursacht
	 * haben
	 * 
	 * @return <code>List</code><<code>Input></code> - Inputs die Fehler
	 *         verursacht haben
	 */
	public List<Input> getErrorInputs() {
		return Collections.unmodifiableList(this.errorInputs);
	}

	/**
	 * Diese Methode gibt den ErrorType der Error Message zurueck
	 * 
	 * @return <code>ErrorType</code> - gibt den ErrorType zurueck
	 */
	public ErrorType getErrorType() {
		return this.error;
	}

	/**
	 * Diese Methode gibt eine Liste von Elementen zuruck bei denen Fehler
	 * aufgetreten sind
	 * 
	 * @return <code>List</code><<code>LogicEditorElement></code> - Liste von
	 *         Elementen die Fehler verursachen
	 */
	public List<LogicEditorElement> getErrorList() {
		return Collections.unmodifiableList(this.errorElements);
	}
}